/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * ExamenComplementarioPresentacion.java
 *
 * Created on 27/12/2010, 09:34:54
 */

package presentacion.examen;

import com.toedter.calendar.IDateEditor;
import hibernate.objeto.EstudioCardiologia;
import hibernate.objeto.EstudioLaboratorio;
import hibernate.objeto.ExamenComplementario;
import java.awt.Cursor;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Calendar;
import java.util.Date;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.JSpinner.DefaultEditor;
import javax.swing.RowFilter;
import javax.swing.SpinnerDateModel;
import javax.swing.table.TableRowSorter;
import logica.CapaLogica;
import logica.ExamenComplementarioLogica;
import logica.validacion.CapaValidacion;
import presentacion.CapaPresentacion;
import presentacion.GestionPacientePresentacion;
import presentacion.utilidad.maquetado.Fuente;
import presentacion.utilidad.maquetado.Icono;
import presentacion.utilidad.maquetado.InformeError;
import presentacion.utilidad.BarMenu;
import presentacion.utilidad.MensajePresentacion;
import presentacion.utilidad.Paginador;
import presentacion.utilidad.tabla.MiModeloTabla;

/**
 *
 * @author usuario
 */
public class ExamenComplementarioPresentacion extends javax.swing.JDialog {

    /** Creates new form ExamenComplementarioPresentacion */
    public ExamenComplementarioPresentacion( 
            java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        setSize(CapaPresentacion.getTamañoMaximoJDialog());
        setLocationRelativeTo(null);

        personalizarGUI();
        setearEventosQueCapturanTeclaEnterYEscape();
    }

    /**
     * Setea datos de la ventana.
     *
     */
    private void personalizarGUI() {
        //Crea la barra de menu
        this.setJMenuBar(BarMenu.createMenuBarGestionExamenComplementario(this));

        iniciarPaginador();
        cargarTablaExamenComplementario();

        if (CapaPresentacion.modoCarga) {
            modoCarga();
        } else if (CapaPresentacion.modoVisualizacion) {
            modoVisualizacion();
        }
        botonCargarExamenComplementario.setVisible(false);
    }

    /**
     * Setea la ventana en modo carga.
     * 
     */
    private void modoCarga() {
        horaExamenComplementario.getModel().setValue(new Date());
        fechaExamenComplementario.setDate(new Date());

        botonCargarExamenComplementario.setVisible(false);
    }
    
    /**
     * Setea la ventana en modo visualización.
     *
     */
    private void modoVisualizacion() {
        textoDescriptivoCargaExamenComplementario.setText("Seleccione un" + 
                " examen complementario para ver sus propiedades");
        
        setearEstadoCampos(false);
        botonCancelar.requestFocus();
        CapaPresentacion.personalizarBotonesEnVisualizacion(
                    botonAceptar, botonCancelar);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        panelVisualizacionExamenComplementario = new javax.swing.JPanel();
        textoDescriptivoVisualizacionExamenComplementario = new javax.swing.JLabel();
        textoFiltrar = new javax.swing.JLabel();
        filtrar = new javax.swing.JTextField();
        tablaExamenComplementarioScrollPane = new javax.swing.JScrollPane();
        tablaExamenComplementario = new javax.swing.JTable(new MiModeloTabla());
        paginadorUno = new javax.swing.JPanel();
        botonAnteriorPaginadorUno = new javax.swing.JButton();
        botonSiguientePaginadorUno = new javax.swing.JButton();
        textoDescriptivoCargaExamenComplementario = new javax.swing.JLabel();
        botonCargarExamenComplementario = new javax.swing.JButton();
        panelCargaExamenComplementario = new javax.swing.JPanel();
        textoHoraYFechaExamenComplementario = new javax.swing.JLabel();
        SpinnerDateModel spinerModel = new SpinnerDateModel(new Date(0, 0, 0, Calendar.HOUR_OF_DAY, 0, 0), null, null, Calendar.HOUR_OF_DAY);
        horaExamenComplementario = new javax.swing.JSpinner(spinerModel);
        fechaExamenComplementario = new com.toedter.calendar.JDateChooser();
        textoOrigenExamenComplementario = new javax.swing.JLabel();
        origenExamenComplementario = new javax.swing.JComboBox();
        textoAreaExamenComplementario = new javax.swing.JLabel();
        areaExamenComplementario = new javax.swing.JComboBox();
        textoNombreExamenComplementario = new javax.swing.JLabel();
        nombreExamenComplementario = new javax.swing.JTextField();
        textoProtocoloExamenComplementario = new javax.swing.JLabel();
        protocoloExamenComplementario = new javax.swing.JTextField();
        botonAdjuntoExamenComplementario = new javax.swing.JButton();
        rutaAdjuntoExamenComplementario = new javax.swing.JLabel();
        textoDetalleExamenComplementario = new javax.swing.JLabel();
        detalleExamenComplementarioScrollPane = new javax.swing.JScrollPane();
        detalleExamenComplementario = new javax.swing.JTextArea();
        botonAceptar = new javax.swing.JButton();
        botonCancelar = new javax.swing.JButton();
        panelAreaExamenComplementario = new javax.swing.JPanel();
        panelExamenComplementarioInternoScrollPane = new javax.swing.JScrollPane();
        panelExamenComplementarioInterno = new javax.swing.JPanel();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Examen Complementario");
        setMinimumSize(new java.awt.Dimension(965, 717));
        setResizable(false);

        panelVisualizacionExamenComplementario.setMinimumSize(new java.awt.Dimension(1004, 156));
        panelVisualizacionExamenComplementario.setPreferredSize(new java.awt.Dimension(1004, 156));

        textoDescriptivoVisualizacionExamenComplementario.setFont(Fuente.FUENTE_TITULO_2);
        textoDescriptivoVisualizacionExamenComplementario.setForeground(Fuente.COLOR_NORMAL);
        textoDescriptivoVisualizacionExamenComplementario.setText("Lista de exámenes complementarios que posee el paciente");
        textoDescriptivoVisualizacionExamenComplementario.setPreferredSize(new java.awt.Dimension(500, 20));

        textoFiltrar.setFont(Fuente.FUENTE_LABEL);
        textoFiltrar.setText("Filtrar");
        textoFiltrar.setPreferredSize(new java.awt.Dimension(28, 20));

        filtrar.setToolTipText("Filtra los datos encontrados por algún criterio");
        filtrar.setPreferredSize(new java.awt.Dimension(200, 20));
        filtrar.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                filtrarKeyReleased(evt);
            }
        });

        tablaExamenComplementarioScrollPane.setPreferredSize(new java.awt.Dimension(984, 90));

        tablaExamenComplementario.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tablaExamenComplementarioMouseClicked(evt);
            }
        });
        tablaExamenComplementario.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                tablaExamenComplementarioKeyReleased(evt);
            }
        });
        tablaExamenComplementarioScrollPane.setViewportView(tablaExamenComplementario);

        paginadorUno.setMaximumSize(new java.awt.Dimension(700, 14));

        botonAnteriorPaginadorUno.setFont(new java.awt.Font("Tahoma", 0, 10));
        botonAnteriorPaginadorUno.setIcon(Icono.ICONO_16_ANTERIOR);
        botonAnteriorPaginadorUno.setPreferredSize(new java.awt.Dimension(43, 23));
        botonAnteriorPaginadorUno.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonAnteriorPaginadorUnoActionPerformed(evt);
            }
        });

        botonSiguientePaginadorUno.setFont(new java.awt.Font("Tahoma", 0, 10));
        botonSiguientePaginadorUno.setIcon(Icono.ICONO_16_SIGUIENTE);
        botonSiguientePaginadorUno.setPreferredSize(new java.awt.Dimension(43, 23));
        botonSiguientePaginadorUno.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonSiguientePaginadorUnoActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout paginadorUnoLayout = new javax.swing.GroupLayout(paginadorUno);
        paginadorUno.setLayout(paginadorUnoLayout);
        paginadorUnoLayout.setHorizontalGroup(
            paginadorUnoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(paginadorUnoLayout.createSequentialGroup()
                .addComponent(botonAnteriorPaginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(botonSiguientePaginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE))
        );
        paginadorUnoLayout.setVerticalGroup(
            paginadorUnoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(paginadorUnoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(botonAnteriorPaginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(botonSiguientePaginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        javax.swing.GroupLayout panelVisualizacionExamenComplementarioLayout = new javax.swing.GroupLayout(panelVisualizacionExamenComplementario);
        panelVisualizacionExamenComplementario.setLayout(panelVisualizacionExamenComplementarioLayout);
        panelVisualizacionExamenComplementarioLayout.setHorizontalGroup(
            panelVisualizacionExamenComplementarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelVisualizacionExamenComplementarioLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelVisualizacionExamenComplementarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(tablaExamenComplementarioScrollPane, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(panelVisualizacionExamenComplementarioLayout.createSequentialGroup()
                        .addComponent(textoDescriptivoVisualizacionExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 252, Short.MAX_VALUE)
                        .addComponent(textoFiltrar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(filtrar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(paginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );
        panelVisualizacionExamenComplementarioLayout.setVerticalGroup(
            panelVisualizacionExamenComplementarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelVisualizacionExamenComplementarioLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelVisualizacionExamenComplementarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE, false)
                    .addComponent(filtrar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoDescriptivoVisualizacionExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoFiltrar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(tablaExamenComplementarioScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(paginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        MiModeloTabla.inicializarTabla(tablaExamenComplementario);

        textoDescriptivoCargaExamenComplementario.setFont(Fuente.FUENTE_TITULO_2);
        textoDescriptivoCargaExamenComplementario.setForeground(Fuente.COLOR_NORMAL);
        textoDescriptivoCargaExamenComplementario.setText("Ingrese los datos del examen complementario");
        textoDescriptivoCargaExamenComplementario.setPreferredSize(new java.awt.Dimension(500, 23));

        botonCargarExamenComplementario.setFont(Fuente.FUENTE_BOTON_INTERNO);
        botonCargarExamenComplementario.setForeground(Fuente.COLOR_NORMAL);
        botonCargarExamenComplementario.setIcon(Icono.ICONO_16_AGREGAR);
        botonCargarExamenComplementario.setText("Agregar examen");
        botonCargarExamenComplementario.setToolTipText("Agrega los datos para cargar un examen complementario");
        botonCargarExamenComplementario.setPreferredSize(new java.awt.Dimension(175, 20));
        botonCargarExamenComplementario.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonCargarExamenComplementarioActionPerformed(evt);
            }
        });

        textoHoraYFechaExamenComplementario.setFont(Fuente.FUENTE_LABEL);
        textoHoraYFechaExamenComplementario.setForeground(Fuente.COLOR_NORMAL);
        textoHoraYFechaExamenComplementario.setText("Hora y fecha");
        textoHoraYFechaExamenComplementario.setPreferredSize(new java.awt.Dimension(95, 20));

        JSpinner.DateEditor horaDeMuerte = new JSpinner.DateEditor(horaExamenComplementario, "HH:mm:ss");
        horaExamenComplementario.setEditor(horaDeMuerte);
        horaExamenComplementario.setFont(Fuente.FUENTE_TEXTFIELD);
        horaExamenComplementario.setPreferredSize(new java.awt.Dimension(128, 20));

        fechaExamenComplementario.setToolTipText("");
        fechaExamenComplementario.setDate(new Date());
        fechaExamenComplementario.setMaxSelectableDate(new Date());
        fechaExamenComplementario.setMinSelectableDate(new java.util.Date(-2208985673000L));
        fechaExamenComplementario.setPreferredSize(new java.awt.Dimension(144, 20));

        textoOrigenExamenComplementario.setFont(Fuente.FUENTE_LABEL);
        textoOrigenExamenComplementario.setForeground(Fuente.COLOR_NORMAL);
        textoOrigenExamenComplementario.setText("Orígen");
        textoOrigenExamenComplementario.setPreferredSize(new java.awt.Dimension(95, 20));

        origenExamenComplementario.setFont(Fuente.FUENTE_COMBOBOX);
        origenExamenComplementario.setForeground(Fuente.COLOR_NORMAL);
        origenExamenComplementario.setModel(CapaPresentacion.getListaDeOrigenDeExamenComplementario());
        origenExamenComplementario.setPreferredSize(new java.awt.Dimension(278, 20));

        textoAreaExamenComplementario.setFont(Fuente.FUENTE_LABEL);
        textoAreaExamenComplementario.setForeground(Fuente.COLOR_NORMAL);
        textoAreaExamenComplementario.setText("Área");
        textoAreaExamenComplementario.setPreferredSize(new java.awt.Dimension(95, 20));

        areaExamenComplementario.setFont(Fuente.FUENTE_COMBOBOX);
        areaExamenComplementario.setForeground(Fuente.COLOR_NORMAL);
        areaExamenComplementario.setModel(CapaPresentacion.getListaDeAreaDeExamenComplementario());
        areaExamenComplementario.setPreferredSize(new java.awt.Dimension(278, 20));
        areaExamenComplementario.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                areaExamenComplementarioActionPerformed(evt);
            }
        });

        textoNombreExamenComplementario.setFont(Fuente.FUENTE_LABEL);
        textoNombreExamenComplementario.setForeground(Fuente.COLOR_NORMAL);
        textoNombreExamenComplementario.setText("Nombre");
        textoNombreExamenComplementario.setPreferredSize(new java.awt.Dimension(95, 20));

        nombreExamenComplementario.setPreferredSize(new java.awt.Dimension(278, 20));

        textoProtocoloExamenComplementario.setFont(Fuente.FUENTE_LABEL);
        textoProtocoloExamenComplementario.setForeground(Fuente.COLOR_NORMAL);
        textoProtocoloExamenComplementario.setText("Protocolo");
        textoProtocoloExamenComplementario.setPreferredSize(new java.awt.Dimension(95, 20));

        protocoloExamenComplementario.setPreferredSize(new java.awt.Dimension(278, 20));

        botonAdjuntoExamenComplementario.setFont(Fuente.FUENTE_BOTON_INTERNO);
        botonAdjuntoExamenComplementario.setForeground(Fuente.COLOR_NORMAL);
        botonAdjuntoExamenComplementario.setIcon(Icono.ICONO_16_AGREGAR);
        botonAdjuntoExamenComplementario.setText("Adjunto");
        botonAdjuntoExamenComplementario.setToolTipText("Busca la ruta del archivo (hasta 1 Gb)");
        botonAdjuntoExamenComplementario.setPreferredSize(new java.awt.Dimension(95, 20));
        botonAdjuntoExamenComplementario.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonAdjuntoExamenComplementarioActionPerformed(evt);
            }
        });

        rutaAdjuntoExamenComplementario.setFont(Fuente.FUENTE_LABEL);
        rutaAdjuntoExamenComplementario.setForeground(Fuente.COLOR_NORMAL);
        rutaAdjuntoExamenComplementario.setPreferredSize(new java.awt.Dimension(278, 20));
        rutaAdjuntoExamenComplementario.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                rutaAdjuntoExamenComplementarioMouseClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                rutaAdjuntoExamenComplementarioMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                rutaAdjuntoExamenComplementarioMouseExited(evt);
            }
        });

        textoDetalleExamenComplementario.setFont(Fuente.FUENTE_LABEL);
        textoDetalleExamenComplementario.setForeground(Fuente.COLOR_NORMAL);
        textoDetalleExamenComplementario.setText("Detalle");
        textoDetalleExamenComplementario.setPreferredSize(new java.awt.Dimension(95, 20));

        detalleExamenComplementarioScrollPane.setPreferredSize(new java.awt.Dimension(278, 124));

        detalleExamenComplementario.setColumns(20);
        detalleExamenComplementario.setFont(Fuente.FUENTE_TEXTFIELD);
        detalleExamenComplementario.setForeground(Fuente.COLOR_NORMAL);
        detalleExamenComplementario.setLineWrap(true);
        detalleExamenComplementario.setRows(2);
        detalleExamenComplementario.setWrapStyleWord(true);
        detalleExamenComplementario.setMinimumSize(new java.awt.Dimension(0, 0));
        detalleExamenComplementario.setPreferredSize(new java.awt.Dimension(278, 100));
        detalleExamenComplementarioScrollPane.setViewportView(detalleExamenComplementario);

        javax.swing.GroupLayout panelCargaExamenComplementarioLayout = new javax.swing.GroupLayout(panelCargaExamenComplementario);
        panelCargaExamenComplementario.setLayout(panelCargaExamenComplementarioLayout);
        panelCargaExamenComplementarioLayout.setHorizontalGroup(
            panelCargaExamenComplementarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelCargaExamenComplementarioLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelCargaExamenComplementarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(textoNombreExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoProtocoloExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(botonAdjuntoExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoOrigenExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoHoraYFechaExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoAreaExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoDetalleExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(panelCargaExamenComplementarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(panelCargaExamenComplementarioLayout.createSequentialGroup()
                        .addComponent(horaExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(fechaExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(origenExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(areaExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(nombreExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(protocoloExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(rutaAdjuntoExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(detalleExamenComplementarioScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        panelCargaExamenComplementarioLayout.setVerticalGroup(
            panelCargaExamenComplementarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelCargaExamenComplementarioLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelCargaExamenComplementarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(fechaExamenComplementario, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(textoHoraYFechaExamenComplementario, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(horaExamenComplementario, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelCargaExamenComplementarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(textoOrigenExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(origenExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelCargaExamenComplementarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(textoAreaExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(areaExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelCargaExamenComplementarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(textoNombreExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(nombreExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelCargaExamenComplementarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(textoProtocoloExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(protocoloExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelCargaExamenComplementarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(botonAdjuntoExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(rutaAdjuntoExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelCargaExamenComplementarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(textoDetalleExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(detalleExamenComplementarioScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 260, Short.MAX_VALUE))
                .addContainerGap())
        );

        botonAceptar.setFont(Fuente.FUENTE_BOTON_EXTERNO);
        botonAceptar.setForeground(Fuente.COLOR_NORMAL);
        botonAceptar.setIcon(Icono.ICONO_16_ACEPTAR);
        botonAceptar.setText("Aceptar");
        botonAceptar.setToolTipText("Agrega el examen complementario");
        botonAceptar.setPreferredSize(new java.awt.Dimension(110, 23));
        botonAceptar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonAceptarActionPerformed(evt);
            }
        });

        botonCancelar.setFont(Fuente.FUENTE_BOTON_EXTERNO);
        botonCancelar.setForeground(Fuente.COLOR_NORMAL);
        botonCancelar.setIcon(Icono.ICONO_16_CANCELAR);
        botonCancelar.setText("Cancelar");
        botonCancelar.setToolTipText("Cancela la operación");
        botonCancelar.setPreferredSize(new java.awt.Dimension(110, 23));
        botonCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonCancelarActionPerformed(evt);
            }
        });

        panelExamenComplementarioInternoScrollPane.setBorder(null);
        panelExamenComplementarioInternoScrollPane.setPreferredSize(new java.awt.Dimension(575, 486));

        panelExamenComplementarioInterno.setPreferredSize(new java.awt.Dimension(374, 390));
        panelExamenComplementarioInterno.setLayout(new javax.swing.BoxLayout(panelExamenComplementarioInterno, javax.swing.BoxLayout.LINE_AXIS));
        panelExamenComplementarioInternoScrollPane.setViewportView(panelExamenComplementarioInterno);

        javax.swing.GroupLayout panelAreaExamenComplementarioLayout = new javax.swing.GroupLayout(panelAreaExamenComplementario);
        panelAreaExamenComplementario.setLayout(panelAreaExamenComplementarioLayout);
        panelAreaExamenComplementarioLayout.setHorizontalGroup(
            panelAreaExamenComplementarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelAreaExamenComplementarioLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(panelExamenComplementarioInternoScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );
        panelAreaExamenComplementarioLayout.setVerticalGroup(
            panelAreaExamenComplementarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelAreaExamenComplementarioLayout.createSequentialGroup()
                .addComponent(panelExamenComplementarioInternoScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 452, Short.MAX_VALUE)
                .addContainerGap())
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(panelVisualizacionExamenComplementario, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(textoDescriptivoCargaExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 329, Short.MAX_VALUE)
                        .addComponent(botonCargarExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(panelCargaExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(panelAreaExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(botonAceptar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(botonCancelar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(panelVisualizacionExamenComplementario, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(textoDescriptivoCargaExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(botonCargarExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(11, 11, 11)
                        .addComponent(panelAreaExamenComplementario, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(panelCargaExamenComplementario, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                .addGap(11, 11, 11)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(botonCancelar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(botonAceptar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void botonCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonCancelarActionPerformed
        this.dispose();
}//GEN-LAST:event_botonCancelarActionPerformed

    private void botonAceptarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonAceptarActionPerformed
        //Resetea paginador
        Paginador.paginarElemento[0] = false;
        agregarExamenComplementario();
}//GEN-LAST:event_botonAceptarActionPerformed

    /**
     * Al agregarse un nuevo examen complementario se actualiza la tabla y se
     * selecciona por defecto el examen agregado mostrandose las propiedades del
     * mismo.
     */
    private void actualizarExamenComplementadioCargado() {
        cargarTablaExamenComplementario();

        while(!MiModeloTabla.seleccionarFilaDeTabla(String.valueOf(
                examenComplementarioACargar.getIdExamenComplementario()),
                tablaExamenComplementario, tablaExamenComplementarioScrollPane)) {
                paginarAdelanteTablaExamenComplementario();
        }
        
        cargarOVerPropiedadesExamenComplementario();
    }

    private void tablaExamenComplementarioMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tablaExamenComplementarioMouseClicked
        cargarOVerPropiedadesExamenComplementario();
}//GEN-LAST:event_tablaExamenComplementarioMouseClicked

    private void tablaExamenComplementarioKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_tablaExamenComplementarioKeyReleased
        if (evt.getKeyCode() == KeyEvent.VK_UP
                || evt.getKeyCode() == KeyEvent.VK_DOWN) {
            cargarOVerPropiedadesExamenComplementario();
        }
}//GEN-LAST:event_tablaExamenComplementarioKeyReleased

    /**
     * Al seleccionar una objeto ExamenComplementario de la tabla deben
     * inhabilitarse los campos de carga. Si el objeto es nulo se permite el
     * ingresos de los datos.
     * 
     */
    private void cargarOVerPropiedadesExamenComplementario() {
        resetearPanelesEstudiosInternos();

        //Recupera lo seleccionado de tabla
        examenComplementarioAVisualizar = (ExamenComplementario)
                MiModeloTabla.recuperarObjetoDeTabla(
                ExamenComplementario.class.getName(), tablaExamenComplementario);

        if (examenComplementarioAVisualizar == null &&
                CapaPresentacion.modoCarga) {
            habilitarCarga();
            botonCargarExamenComplementario.setVisible(false);
            
        } else if (examenComplementarioAVisualizar == null &&
                CapaPresentacion.modoVisualizacion) {
            limpiarPantalla();
            botonCargarExamenComplementario.setVisible(false);
            
        } else if (examenComplementarioAVisualizar != null &&
                CapaPresentacion.modoModificacion) {
            habilitarModificacion();
            botonCargarExamenComplementario.setVisible(true);
            
        } else if (examenComplementarioAVisualizar != null &&
                CapaPresentacion.modoVisualizacion) {
            habilitarVisualizacion();
            botonCargarExamenComplementario.setVisible(false);
        }
    }

    /**
     * Habilita los campos necesarios para cargar un examen complementario.
     *
     */
    public void habilitarCarga() {
        if (CapaPresentacion.modoCarga || CapaPresentacion.modoModificacion) {
            examenComplementarioAVisualizar = null;
            textoDescriptivoCargaExamenComplementario.setText(
                    "Ingrese los datos del examen complementario");
            setearEstadoCampos(true);
            limpiarPantalla();

            CapaPresentacion.personalizarBotonesEnCargaDeDatos(
                    botonAceptar, botonCancelar);

            //Deselecciona lo seleccionado en la tabla
            tablaExamenComplementario.clearSelection();
            botonCargarExamenComplementario.setVisible(false);
            eliminarPanel();
            datosEstudioCardiologicoPanel = null;
            datosEstudioLaboratorioPanel = null;
            examenComplementarioACargar = null;
        }
    }

    /**
     * Habilita los campos necesarios para visualizar propiedades del examen
     * complementario.
     *
     */
    private void habilitarVisualizacion() {
        textoDescriptivoCargaExamenComplementario.setText("Propiedades");
        setearEstadoCampos(false);
        exhibirDatosEnPantalla(examenComplementarioAVisualizar);
        //ESTUDIO CARDIOLOGIA
        if (examenComplementarioAVisualizar.getAreaExamenComplementario().toString().
                equalsIgnoreCase("cardiología")) {
            eliminarPanel();
            agregarPanel(panelExamenComplementarioInterno,
                    new DatosEstudioCardiologicoPanel(examenComplementarioAVisualizar.
                    getEstudioCardiologia()));
        //ESTUDIO LABORATORIO
        } else if (examenComplementarioAVisualizar.getAreaExamenComplementario().toString().
                equalsIgnoreCase("laboratorio")) {
            eliminarPanel();
            agregarPanel(panelExamenComplementarioInterno,
                    new DatosEstudioLaboratorioPanel(examenComplementarioAVisualizar.
                    getEstudioLaboratorio()));
        }

        CapaPresentacion.personalizarBotonesEnVisualizacion(botonAceptar, botonCancelar);
    }

    /**
     * Habilita los campos necesarios para modificar propiedades del examen
     * complementario.
     *
     */
    private void habilitarModificacion() {
        textoDescriptivoCargaExamenComplementario.setText("Propiedades");
        setearEstadoCampos(true);
        exhibirDatosEnPantalla(examenComplementarioAVisualizar);
        //ESTUDIO CARDIOLOGIA
        if (examenComplementarioAVisualizar.getAreaExamenComplementario().toString().
                equalsIgnoreCase("cardiología")) {
            eliminarPanel();
            agregarPanel(panelExamenComplementarioInterno,
                    new DatosEstudioCardiologicoPanel(examenComplementarioAVisualizar.
                    getEstudioCardiologia()));
        //ESTUDIO LABORATORIO
        } else if (examenComplementarioAVisualizar.getAreaExamenComplementario().toString().
                equalsIgnoreCase("laboratorio")) {
            eliminarPanel();
            agregarPanel(panelExamenComplementarioInterno,
                    new DatosEstudioLaboratorioPanel(examenComplementarioAVisualizar.
                    getEstudioLaboratorio()));
        }

        CapaPresentacion.personalizarBotonesEnCargaDeDatos(botonAceptar, botonCancelar);
    }

    /**
     * Setea un campo a habilitado o inhabilitado según el parámetro. También
     * setea en Normal el color de los textos.
     *
     * @param estado El estado a setear: true para carga, false para visualizción
     */
    private void setearEstadoCampos(boolean estado) {
        textoHoraYFechaExamenComplementario.setForeground(Fuente.COLOR_NORMAL);
        horaExamenComplementario.setEnabled(estado);
        fechaExamenComplementario.setEnabled(estado);
        textoOrigenExamenComplementario.setForeground(Fuente.COLOR_NORMAL);
        origenExamenComplementario.setEnabled(estado);
        textoAreaExamenComplementario.setForeground(Fuente.COLOR_NORMAL);
        areaExamenComplementario.setEnabled(estado);
        textoNombreExamenComplementario.setForeground(Fuente.COLOR_NORMAL);
        nombreExamenComplementario.setEnabled(estado);
        textoProtocoloExamenComplementario.setForeground(Fuente.COLOR_NORMAL);
        protocoloExamenComplementario.setEnabled(estado);
        botonAdjuntoExamenComplementario.setForeground(Fuente.COLOR_NORMAL);
        botonAdjuntoExamenComplementario.setEnabled(estado);
//        adjuntoExamenComplementario.setEnabled(estado);
        textoDetalleExamenComplementario.setForeground(Fuente.COLOR_NORMAL);
        detalleExamenComplementario.setEnabled(estado);
    }

    /**
     * Limpia pantalla.
     *
     */
    private void limpiarPantalla() {
        horaExamenComplementario.getModel().setValue(new Date());
        fechaExamenComplementario.setDate(new Date());
        origenExamenComplementario.setSelectedIndex(0);
        areaExamenComplementario.setSelectedIndex(0);
        nombreExamenComplementario.setText("");
        protocoloExamenComplementario.setText("");
        botonAdjuntoExamenComplementario.setText("Adjunto");
        botonAdjuntoExamenComplementario.setIcon(Icono.ICONO_16_AGREGAR);
        rutaAdjuntoExamenComplementario.setText("");
        rutaAdjuntoExamenComplementario.setToolTipText(null);
        detalleExamenComplementario.setText("");
    }

    /**
     * Visualiza en pantalla las distintas propiedades del objeto.
     *
     * @param examenComplementario El objeto ExamenComplementario a visualizar
     */
    private void exhibirDatosEnPantalla(ExamenComplementario examenComplementario){
        String horaEnString = examenComplementario.getHoraExamenComplementario();
        horaExamenComplementario.getModel().setValue(new Date(0, 0, 0,
                CapaLogica.separarHoras(horaEnString),
                CapaLogica.separarMinutos(horaEnString),
                CapaLogica.separarSegundos(horaEnString)));
        fechaExamenComplementario.setDate(examenComplementario.
                getFechaExamenComplementario());

        origenExamenComplementario.setSelectedIndex(
                CapaPresentacion.getIndiceComboBoxPorString(
                examenComplementario.getOrigenExamenComplementario(),
                origenExamenComplementario));

        areaExamenComplementario.setSelectedIndex(
                CapaPresentacion.getIndiceComboBoxPorString(
                examenComplementario.getAreaExamenComplementario(),
                areaExamenComplementario));

        nombreExamenComplementario.setText(
                examenComplementario.getNombreExamenComplementario());
        nombreExamenComplementario.setCaretPosition(0);
        protocoloExamenComplementario.setText(
                examenComplementario.getProtocoloExamenComplementario());
        protocoloExamenComplementario.setCaretPosition(0);

        //Seteo Archivo adjunto        
            if (examenComplementario.getNombreArchivoAdjuntoExamenComplementario() != null) {
                if (!CapaPresentacion.modoVisualizacion) {
                    botonAdjuntoExamenComplementario.setIcon(Icono.ICONO_16_QUITAR);
                    botonAdjuntoExamenComplementario.setToolTipText("Quitar imágen");
                }
                rutaAdjuntoExamenComplementario.setText(
                        "<html><u>" + CapaLogica.
                        reemplazarDosBarrasInvertidasPorUnaBarraInvertida(
                        examenComplementario.getNombreArchivoAdjuntoExamenComplementario()) + "</u>"
                        );
                rutaAdjuntoExamenComplementario.setToolTipText("Click para ver: " + CapaLogica.
                        reemplazarDosBarrasInvertidasPorUnaBarraInvertida(
                        examenComplementario.getNombreArchivoAdjuntoExamenComplementario()));
                rutaAdjuntoExamenComplementario.setForeground(Fuente.COLOR_HIPERVINCULO);
            } else {
                botonAdjuntoExamenComplementario.setText("Adjunto");
                botonAdjuntoExamenComplementario.setIcon(Icono.ICONO_16_AGREGAR);
                rutaAdjuntoExamenComplementario.setText("");
                rutaAdjuntoExamenComplementario.setToolTipText(null);
            }

        detalleExamenComplementario.setText(
                examenComplementario.getDetalleExamenComplementario());
        detalleExamenComplementario.setCaretPosition(0);
    }

    private void filtrarKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_filtrarKeyReleased
        TableRowSorter<MiModeloTabla> sorter = new TableRowSorter<MiModeloTabla>
                ((MiModeloTabla) tablaExamenComplementario.getModel());

        tablaExamenComplementario.setRowSorter(sorter);
        String texto = filtrar.getText();
        if (texto.length() == 0) {
            sorter.setRowFilter(null);
        } else {
            sorter.setRowFilter(RowFilter.regexFilter("(?i).*" + texto + ".*"));
        }
}//GEN-LAST:event_filtrarKeyReleased

    private void botonAdjuntoExamenComplementarioActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonAdjuntoExamenComplementarioActionPerformed
        if (botonAdjuntoExamenComplementario.getIcon().equals(Icono.ICONO_16_AGREGAR)) {
            JFileChooser seleccionarArchivo = new JFileChooser();
            int seleccion = seleccionarArchivo.showOpenDialog(this);

            if (seleccion == JFileChooser.APPROVE_OPTION) {
                rutaAdjuntoExamenComplementario.setText(
                        seleccionarArchivo.getSelectedFile().toString());
                rutaAdjuntoExamenComplementario.setToolTipText(
                        rutaAdjuntoExamenComplementario.getText());
                rutaAdjuntoExamenComplementario.setFont(Fuente.FUENTE_LABEL);
                rutaAdjuntoExamenComplementario.setForeground(Fuente.COLOR_NORMAL);
                botonAdjuntoExamenComplementario.setIcon(Icono.ICONO_16_QUITAR);
                botonAdjuntoExamenComplementario.setToolTipText("Quita el adjunto");
            } else {
                rutaAdjuntoExamenComplementario.setText("");
                botonAdjuntoExamenComplementario.setIcon(Icono.ICONO_16_AGREGAR);
                botonAdjuntoExamenComplementario.setToolTipText(
                        "Busca la ruta del archivo (hasta 1 Gb)");
            }
            
        } else {
            rutaAdjuntoExamenComplementario.setText("");
            botonAdjuntoExamenComplementario.setIcon(Icono.ICONO_16_AGREGAR);
            botonAdjuntoExamenComplementario.setToolTipText(
                    "Busca la ruta del archivo (hasta 1 Gb)");
        }
}//GEN-LAST:event_botonAdjuntoExamenComplementarioActionPerformed

    private void botonCargarExamenComplementarioActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonCargarExamenComplementarioActionPerformed
        habilitarCarga();
}//GEN-LAST:event_botonCargarExamenComplementarioActionPerformed

    private void areaExamenComplementarioActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_areaExamenComplementarioActionPerformed
        manejarPanelesCardiologiaYLaboratorio();
    }//GEN-LAST:event_areaExamenComplementarioActionPerformed

    private void botonAnteriorPaginadorUnoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonAnteriorPaginadorUnoActionPerformed
        paginarAtrasTablaExamenComplementario();
}//GEN-LAST:event_botonAnteriorPaginadorUnoActionPerformed

    private void botonSiguientePaginadorUnoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonSiguientePaginadorUnoActionPerformed
        paginarAdelanteTablaExamenComplementario();
}//GEN-LAST:event_botonSiguientePaginadorUnoActionPerformed

    private void rutaAdjuntoExamenComplementarioMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rutaAdjuntoExamenComplementarioMouseClicked
        if(evt.getButton() == 1 && rutaAdjuntoExamenComplementario.getForeground().equals(
                Fuente.COLOR_HIPERVINCULO)) {
            CapaPresentacion.abrirArchivo(
                    examenComplementarioAVisualizar.getIdExamenComplementario(),
                    examenComplementarioAVisualizar.getNombreArchivoAdjuntoExamenComplementario(),
                    examenComplementarioAVisualizar.getArchivoAdjuntoExamenComplementario(),
                    true);
        }
    }//GEN-LAST:event_rutaAdjuntoExamenComplementarioMouseClicked

    private void rutaAdjuntoExamenComplementarioMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rutaAdjuntoExamenComplementarioMouseEntered
        if (rutaAdjuntoExamenComplementario.getForeground().equals(Fuente.COLOR_HIPERVINCULO)) {
            setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
        }
    }//GEN-LAST:event_rutaAdjuntoExamenComplementarioMouseEntered

    private void rutaAdjuntoExamenComplementarioMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rutaAdjuntoExamenComplementarioMouseExited
        setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
    }//GEN-LAST:event_rutaAdjuntoExamenComplementarioMouseExited

    /**
     * Se encarga de manejar los paneles de cardiologia y laboratorio que
     * se agregan o se eliminan segun corresponda.
     */
    private void manejarPanelesCardiologiaYLaboratorio() {
        guardaPanelExamenComplementarioInterno();
        eliminarPanel();
        cargaPanelExamenComplementarioInterno();
    }
    
    /**
     * Al seleccionar un nuevo examen, el panel del examen actual que se
     * encuentra cargado se guarda en una variable local, para luego volver a
     * accederlo al volver a seleccionarlo.
     *
     */
    private void guardaPanelExamenComplementarioInterno() {
        int paneles = panelExamenComplementarioInterno.getComponents().length;
        if (paneles > 0) {
            JPanel panelAGuardar = (JPanel) panelExamenComplementarioInterno.
                    getComponents()[0];
            if (panelAGuardar instanceof DatosEstudioCardiologicoPanel) {
                datosEstudioCardiologicoPanel =
                        (DatosEstudioCardiologicoPanel) panelAGuardar;
            } else if (panelAGuardar instanceof DatosEstudioLaboratorioPanel) {
                datosEstudioLaboratorioPanel =
                        (DatosEstudioLaboratorioPanel) panelAGuardar;
            }
        }
    }

    /**
     * Carga el panel con el tipo de estudio seleccionado. Puede ser un estudio
     * de cardiologia o de laboratorio.
     *
     */
    private void cargaPanelExamenComplementarioInterno() {
        EstudioCardiologia estudioCardiologiaLocal = null;
        EstudioLaboratorio estudioLaboratorioLocal = null;

        if (examenComplementarioACargar != null) {
            estudioCardiologiaLocal =
                    examenComplementarioACargar.getEstudioCardiologia();
            estudioLaboratorioLocal =
                    examenComplementarioACargar.getEstudioLaboratorio();
        }

        //ESTUDIO LABORATORIO
        if (areaExamenComplementario.getSelectedItem().toString().
                equalsIgnoreCase("cardiología")) {
            DatosEstudioCardiologicoPanel datosEstudioCardiologicoPanelLocal =
                    new DatosEstudioCardiologicoPanel(estudioCardiologiaLocal);
            if (datosEstudioCardiologicoPanel != null) {
                datosEstudioCardiologicoPanelLocal =
                        datosEstudioCardiologicoPanel;
            }
            agregarPanel(panelExamenComplementarioInterno,
                    datosEstudioCardiologicoPanelLocal);
        //ESTUDIO CARDIOLOGIA
        } else if (areaExamenComplementario.getSelectedItem().toString().
                equalsIgnoreCase("laboratorio")) {
            DatosEstudioLaboratorioPanel datosEstudioLaboratorioPanelLocal =
                    new DatosEstudioLaboratorioPanel(estudioLaboratorioLocal);
            if (datosEstudioLaboratorioPanel != null) {
                datosEstudioLaboratorioPanelLocal =
                        datosEstudioLaboratorioPanel;
            }
            agregarPanel(panelExamenComplementarioInterno,
                    datosEstudioLaboratorioPanelLocal);
        }
    }

    /**
     * Agrega un panel al panelExamenComplementarioInterno.
     *
     * @param panelContenedor El panel que contiene al panel que se agregará
     * @param panelComponente El panel componente que se agregará
     *
     */
    private void agregarPanel(JPanel panelContenedor, JPanel panelComponente) {
        panelContenedor.add(panelComponente);
        panelContenedor.revalidate();
        panelContenedor.repaint();
    }

    /**
     *
     * Quita el panel al panelExamenComplementarioInterno.
     *
     */
    private void eliminarPanel() {
        int paneles = panelExamenComplementarioInterno.getComponents().length;
        if (paneles > 0) {
            panelExamenComplementarioInterno.remove(
                    panelExamenComplementarioInterno.getComponents()[0]);
            panelExamenComplementarioInterno.revalidate();
            panelExamenComplementarioInterno.repaint();
        }
    }

    /**
     * Agrega un examen complementario.
     * 
     */
    private void agregarExamenComplementario() {
        //Valida todos los campos
        if (validarCampos()) {
            if (confirmarModificacion()) {
                //Carga toda la información de la pantalla
                recopilarInformacion();
                int[] idExamenComplementario = new int[1];
                if (examenComplementarioAVisualizar != null) {
                    //Modificación de examenComplementario
                    idExamenComplementario[0] =
                            examenComplementarioAVisualizar.
                            getIdExamenComplementario();
                } else {
                    //Alta de examenComplementario
                    idExamenComplementario[0] = -1;
                }
                if (ExamenComplementarioLogica.agregarExamenComplementario(
                        datosExamenComplementario,
                        GestionPacientePresentacion.getPaciente(),
                        examenComplementarioAVisualizar,
                        idExamenComplementario)) {
                    examenComplementarioACargar = ExamenComplementarioLogica.
                            getExamenComplementarioPorId(idExamenComplementario[0]);
                    //Setea en el examen complementario creado un estudio
                    //cardiologioco o un estudio laboratorio
                    if (setearEstudioCardiologioOLaboratorio()) {
                        if (examenComplementarioAVisualizar != null) {
                            resetearPanelesEstudiosInternos();
                        }
                        actualizarExamenComplementadioCargado();
                    }
                }
            }
            //Errores
        } else {
            MensajePresentacion.errorDatosInvalidos();
        }
    }

    /**
     * Si corresponde setea en el examen complementario un estudio de cardiologia
     * o de laboratorio.
     */
    private boolean setearEstudioCardiologioOLaboratorio() {
        boolean retorno = true;
        int[] idEstudioCardiologiaCreado =
                    new int[1];
        int[] idEstudioLaboratoriaCreado =
                new int[1];

        //Si esta seteado el campo de area en cardiologia
        //Se agrega un objeto cardiologia y se setea a un examen complementario
        if (areaExamenComplementario.getSelectedItem().toString().
                equalsIgnoreCase("cardiología")) {            
            if (agregarEstudioCardiologia(
                    idEstudioCardiologiaCreado)) {
                idEstudioLaboratoriaCreado[0] = -1;
                ExamenComplementarioLogica.
                        setearEstudioCardiologico(
                        examenComplementarioACargar, idEstudioCardiologiaCreado,
                        idEstudioLaboratoriaCreado);
            } else {
                retorno = false;
            }
        }
        //Si esta seteado el campo de area en laboratorio
        //Se agrega un objeto laboratorio y se setea a un examen complementario
        if (areaExamenComplementario.getSelectedItem().toString().
                equalsIgnoreCase("laboratorio")) {
            
            if (agregarEstudioLaboratorio(idEstudioLaboratoriaCreado)) {
                idEstudioCardiologiaCreado[0] = -1;
                ExamenComplementarioLogica.
                        setearEstudioCardiologico(
                        examenComplementarioACargar, idEstudioCardiologiaCreado,
                        idEstudioLaboratoriaCreado);
            } else {
                retorno = false;
            }

        }
        return retorno;
    }

    /**
     * Agrega un estudio Cardiologia.
     *
     * @param idObjetoCreado El id del objeto que se crea
     * @return true si se agregó correctamente, false en caso contrario
     */
    private boolean agregarEstudioCardiologia(int[] idObjetoCreado) {
        JPanel panelATratar = (JPanel) panelExamenComplementarioInterno.
                    getComponents()[0];
                return ((DatosEstudioCardiologicoPanel) panelATratar).
                        agregarEstudioCardiologia(idObjetoCreado,
                        new EstudioCardiologia());
    }

    /**
     * Agrega un estudio Laboratorio.
     *
     * @param idObjetoCreado El id del objeto que se crea
     * @return true si se agregó correctamente, false en caso contrario
     */
    private boolean agregarEstudioLaboratorio(int[] idObjetoCreado) {
        JPanel panelATratar = (JPanel) panelExamenComplementarioInterno.
                    getComponents()[0];
                return ((DatosEstudioLaboratorioPanel) panelATratar).
                        agregarEstudioLaboratorioLaboratorio(idObjetoCreado,
                        new EstudioLaboratorio());
    }

    /**
     * Valida los datos teniendo en cuenta que pueden existir exámenes
     * de cardiología y de laboratorio.
     *
     * @return true si esta listo para cargarse, false en caso contrario
     */
    private boolean validarCampos() {
        boolean validarCamposExamenComplementario =
                validarCamposExamenComplementario();
        boolean validarCamposCardiologiaYLaboratorio =
                validarCamposCardiologiaYLaboratorio();
        return validarCamposCardiologiaYLaboratorio &&
                validarCamposExamenComplementario;
    }

    /**
     * Realiza la validación de los datos
     * 
     * @return true si esta listo para cargarse, false en caso contrario
     */
    private boolean validarCamposExamenComplementario() {
        boolean esFechaValida = false;
        boolean esOrigenValida = false;
        boolean esAreaValida = false;
        boolean esAdjuntoValida = false;

        //Manejo de la validación de fecha
        if (!CapaValidacion.validarFecha(fechaExamenComplementario.getDate(), null, true)) {
            textoHoraYFechaExamenComplementario.setForeground(
                    Fuente.COLOR_ERROR);
            textoHoraYFechaExamenComplementario.setToolTipText(InformeError.
                    INFORME_ERROR_USO_COMUN_HORA_Y_FECHA);
            esFechaValida = false;
        } else {
            textoHoraYFechaExamenComplementario.setForeground(
                    Fuente.COLOR_NORMAL);
            textoHoraYFechaExamenComplementario.setToolTipText(null);
            esFechaValida = true;
        }

        //Manejo de la validación del origen
        if (!CapaValidacion.validarCampoObligatorio(
                origenExamenComplementario.getSelectedItem().toString())) {
            textoOrigenExamenComplementario.setForeground(
                    Fuente.COLOR_ERROR);
            textoOrigenExamenComplementario.setToolTipText(InformeError.
                    INFORME_ERROR_EXAMEN_COMPLEMENTARIO_ORIGEN);
            esOrigenValida = false;
        } else {
            textoOrigenExamenComplementario.setForeground(
                    Fuente.COLOR_NORMAL);
            textoOrigenExamenComplementario.setToolTipText(null);
            esOrigenValida = true;
        }

        //Manejo de la validación del area
        if (!CapaValidacion.validarCampoObligatorio(
                areaExamenComplementario.getSelectedItem().toString())) {
            textoAreaExamenComplementario.setForeground(
                    Fuente.COLOR_ERROR);
            textoAreaExamenComplementario.setToolTipText(InformeError.
                    INFORME_ERROR_EXAMEN_COMPLEMENTARIO_AREA);
            esAreaValida = false;
        } else {
            textoAreaExamenComplementario.setForeground(
                    Fuente.COLOR_NORMAL);
            textoAreaExamenComplementario.setToolTipText(null);
            esAreaValida = true;
        }

        if (!CapaValidacion.validarArchivo(rutaAdjuntoExamenComplementario.getText(), false)) {
           botonAdjuntoExamenComplementario.setForeground(
                   Fuente.COLOR_ERROR);
           botonAdjuntoExamenComplementario.setToolTipText(InformeError.
                    INFORME_ERROR_USO_COMUN_ARCHIVO);
           esAdjuntoValida = false;
        } else {
           botonAdjuntoExamenComplementario.setForeground(Fuente.COLOR_NORMAL);
           botonAdjuntoExamenComplementario.setToolTipText(
                   "Busca la ruta del archivo (hasta 1 Gb)");
           esAdjuntoValida = true;
        }

        return esFechaValida && esOrigenValida && esAreaValida && esAdjuntoValida;
    }

    /**
     * Realiza la validación de los datos
     *
     * @return true si esta listo para cargarse, false en caso contrario
     */
    private boolean validarCamposCardiologiaYLaboratorio() {
        int paneles = panelExamenComplementarioInterno.getComponents().length;
        if (areaExamenComplementario.getSelectedItem().toString().
                equalsIgnoreCase("cardiología")
                || areaExamenComplementario.getSelectedItem().toString().
                equalsIgnoreCase("laboratorio")) {
            if (paneles > 0) {
                JPanel panelAValidar = (JPanel) panelExamenComplementarioInterno.
                        getComponents()[0];
                if (areaExamenComplementario.getSelectedItem().toString().
                        equalsIgnoreCase("cardiología")) {
                    return ((DatosEstudioCardiologicoPanel) panelAValidar).
                            validarCamposEstudioCardiologia();
                } else if (areaExamenComplementario.getSelectedItem().toString().
                        equalsIgnoreCase("laboratorio")) {
                    return ((DatosEstudioLaboratorioPanel) panelAValidar).
                            validarCamposEstudioLaboratorio();
                }  else {
                    return true;
                }
            } else {
                return false;
            }
        } else {
            return true;
        }
    }

    /**
     * En caso de tratarse de una madificación debe verificarse que realmente
     * se quiera modificar.
     *
     * @return true si se debe modificar, false en caso contrario
     */
    public boolean confirmarModificacion() {
        boolean retorno = false;
        if (examenComplementarioAVisualizar != null) {
            //Confirmar modificación
            int confirmado = MensajePresentacion.confimarModificacionObjeto(
                    "examen complementario", "el");
            if (JOptionPane.OK_OPTION == confirmado) {
                retorno = true;
            } else {
                retorno = false;
            }
        } else {
            retorno = true;
        }

        return retorno;
    }

    /**
     * Carga todos los datos ingresados en pantalla.
     *
     */
    private void recopilarInformacion() {
        datosExamenComplementario = new Object[8];

        datosExamenComplementario[
                CapaLogica.EXAMEN_COMPLEMENTARIO_HORA] =
                CapaLogica.separarTiempo(
                horaExamenComplementario.getValue().toString());

        datosExamenComplementario[
                CapaLogica.EXAMEN_COMPLEMENTARIO_FECHA] =
                fechaExamenComplementario.getDate();

        datosExamenComplementario[
                CapaLogica.EXAMEN_COMPLEMENTARIO_ORIGEN] =
                origenExamenComplementario.getSelectedItem().toString();

        datosExamenComplementario[
                CapaLogica.EXAMEN_COMPLEMENTARIO_AREA] =
                areaExamenComplementario.getSelectedItem().toString();

        datosExamenComplementario[
                CapaLogica.EXAMEN_COMPLEMENTARIO_NOMBRE] =
                nombreExamenComplementario.getText();

        datosExamenComplementario[
                CapaLogica.EXAMEN_COMPLEMENTARIO_PROTOCOLO] =
                protocoloExamenComplementario.getText();

        datosExamenComplementario[
                CapaLogica.EXAMEN_COMPLEMENTARIO_ADJUNTO] =
                rutaAdjuntoExamenComplementario.getText();

        datosExamenComplementario[
                CapaLogica.EXAMEN_COMPLEMENTARIO_DETALLE] =
                detalleExamenComplementario.getText();
    }

    /**
     * Setea en cada componente del JDialog los eventos que capturarán la tecla
     * enter y escape.
     */
    private void setearEventosQueCapturanTeclaEnterYEscape() {
        //Declaración del evento a capturar
        KeyListener keyListenerEnter = new KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
                    agregarExamenComplementario();
                }
            }
        };
        //Declaración del evento a capturar
        KeyListener keyListenerEscape = new KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                if (evt.getKeyCode() == KeyEvent.VK_ESCAPE) {
                    dispose();
                }
            }
        };

        //Setear eventos
        filtrar.addKeyListener(keyListenerEnter);
        filtrar.addKeyListener(keyListenerEscape);
        tablaExamenComplementario.addKeyListener(keyListenerEscape);

        botonAnteriorPaginadorUno.addKeyListener(keyListenerEscape);
        botonSiguientePaginadorUno.addKeyListener(keyListenerEscape);

        ((DefaultEditor) horaExamenComplementario.getEditor()).
                getTextField().addKeyListener(keyListenerEnter);
        ((DefaultEditor) horaExamenComplementario.getEditor()).
                getTextField().addKeyListener(keyListenerEscape);

        ((IDateEditor) fechaExamenComplementario.getDateEditor()).
                getUiComponent().addKeyListener(keyListenerEnter);
        ((IDateEditor) fechaExamenComplementario.getDateEditor()).
                getUiComponent().addKeyListener(keyListenerEscape);

        origenExamenComplementario.addKeyListener(keyListenerEscape);
        areaExamenComplementario.addKeyListener(keyListenerEscape);
        nombreExamenComplementario.addKeyListener(keyListenerEnter);
        nombreExamenComplementario.addKeyListener(keyListenerEscape);
        protocoloExamenComplementario.addKeyListener(keyListenerEnter);
        protocoloExamenComplementario.addKeyListener(keyListenerEscape);
        botonAdjuntoExamenComplementario.addKeyListener(keyListenerEscape);
        detalleExamenComplementario.addKeyListener(keyListenerEscape);

        botonAceptar.addKeyListener(keyListenerEscape);
        botonCancelar.addKeyListener(keyListenerEscape);
    }

    /**
     * Carga la tabla de examen complementario.
     * 
     */
    private void cargarTablaExamenComplementario() {
        //Si corresponde vuelve a cero el indice del paginador, de lo contrario
        //Lo deja en el valor que se encuentra
        Paginador.actualizaIndice(0);
        MiModeloTabla.cargarTablaExamenComplementario(
                ExamenComplementarioLogica.getVectorExamenComplementarioPorIdPaciente(
                GestionPacientePresentacion.getPaciente().getIdPaciente()),
                tablaExamenComplementario);
    }

    /**
     * Inicia el/los paginadores activos en esta ventana
     */
    private void iniciarPaginador() {
        //Rango de filas para cada paginador
        int rangoFilas[] = new int[CapaLogica.PAGINADOR_PAGINADORES_SIMULTANEOS];

        //Rango de filas para el paginador 1
        rangoFilas[0] = 5;
        //Rango de filas para el paginador 2
        rangoFilas[1] = 10;
        //Rango de filas para el paginador 3
        rangoFilas[2] = 0;

        Paginador.inicializarPaginador(rangoFilas);
    }

    /**
     * Realiza la paginación hacia atrás.
     */
    private void paginarAtrasTablaExamenComplementario() {
        //Retrocede el los índices
        Paginador.atrasPaginador(0);
        Paginador.paginarElemento[0] = true;

        //Vuelve a buscar con los nuevos índices
        if (tablaExamenComplementario.getModel().getColumnCount() > 0) {
               cargarTablaExamenComplementario();
        }
    }

    /**
     * Realiza la paginación hacia adelante, teniendo en cuenta que existan elementos,
     * de lo contrario no procede a listarlos.
     */
    private void paginarAdelanteTablaExamenComplementario() {
        //Adelanta los índices
        Paginador.adelantePaginador(0);
        Paginador.paginarElemento[0] = true;

        //Vuelve a buscar con los nuevos índices
        if (tablaExamenComplementario.getModel().getColumnCount() > 0) {
                //Si no hay elementos siguientes se vuelven los índices hacia atras
                if (ExamenComplementarioLogica.
                        getVectorExamenComplementarioPorIdPaciente(
                    GestionPacientePresentacion.getPaciente().
                    getIdPaciente()) == null) {
                    Paginador.atrasPaginador(0);
                }
                cargarTablaExamenComplementario();
        }
    }

     /**
     * Reseta los paneles correspondientes a estudios internos.
     */
    private void resetearPanelesEstudiosInternos() {
        //Se trata de una modificacion, reinicio los paneles
        //de estudios.
        datosEstudioCardiologicoPanel = null;
        datosEstudioLaboratorioPanel = null;
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JComboBox areaExamenComplementario;
    private javax.swing.JButton botonAceptar;
    private javax.swing.JButton botonAdjuntoExamenComplementario;
    private javax.swing.JButton botonAnteriorPaginadorUno;
    private javax.swing.JButton botonCancelar;
    private javax.swing.JButton botonCargarExamenComplementario;
    private javax.swing.JButton botonSiguientePaginadorUno;
    private javax.swing.JTextArea detalleExamenComplementario;
    private javax.swing.JScrollPane detalleExamenComplementarioScrollPane;
    private com.toedter.calendar.JDateChooser fechaExamenComplementario;
    private javax.swing.JTextField filtrar;
    private javax.swing.JSpinner horaExamenComplementario;
    private javax.swing.JTextField nombreExamenComplementario;
    private javax.swing.JComboBox origenExamenComplementario;
    private javax.swing.JPanel paginadorUno;
    private javax.swing.JPanel panelAreaExamenComplementario;
    private javax.swing.JPanel panelCargaExamenComplementario;
    private javax.swing.JPanel panelExamenComplementarioInterno;
    private javax.swing.JScrollPane panelExamenComplementarioInternoScrollPane;
    private javax.swing.JPanel panelVisualizacionExamenComplementario;
    private javax.swing.JTextField protocoloExamenComplementario;
    private javax.swing.JLabel rutaAdjuntoExamenComplementario;
    private javax.swing.JTable tablaExamenComplementario;
    private javax.swing.JScrollPane tablaExamenComplementarioScrollPane;
    private javax.swing.JLabel textoAreaExamenComplementario;
    private javax.swing.JLabel textoDescriptivoCargaExamenComplementario;
    private javax.swing.JLabel textoDescriptivoVisualizacionExamenComplementario;
    private javax.swing.JLabel textoDetalleExamenComplementario;
    private javax.swing.JLabel textoFiltrar;
    private javax.swing.JLabel textoHoraYFechaExamenComplementario;
    private javax.swing.JLabel textoNombreExamenComplementario;
    private javax.swing.JLabel textoOrigenExamenComplementario;
    private javax.swing.JLabel textoProtocoloExamenComplementario;
    // End of variables declaration//GEN-END:variables
    private Object[] datosExamenComplementario;
    private ExamenComplementario examenComplementarioACargar;
    private ExamenComplementario examenComplementarioAVisualizar;
    private DatosEstudioCardiologicoPanel datosEstudioCardiologicoPanel;
    private DatosEstudioLaboratorioPanel datosEstudioLaboratorioPanel;
}